import Vue from "vue";

/**
 * auth 权限指令
 * 指令用法：
 *  - 在需要控制 auth 级别权限的组件上使用 v-auth:[method] , 如下：
 *    <i-button v-auth:xxx:add >添加用户</a-button>
 *    <a-button v-auth:xxx:delete>删除用户</a-button>
 *    <a v-auth:edit @click="edit(record)">修改</a>
 *
 * 当前用户没有权限时，组件上使用了该指令则会被隐藏
 */
const auth = Vue.directive("auth", {
    inserted: function (el, binding, vnode) {
        const authKey = binding.arg;
        const permissions = vnode.context.$store.state.nowUserInfo.permissions;
        if (!permissions.includes(authKey)&&!permissions.includes("*:*:*")) {
            // 无权限则去除
            if (el) {
                el.style.display = "none";
                el.parentNode && el.parentNode.removeChild(el);
            }
            if(vnode.componentInstance){
                vnode.componentInstance.$parent?.$forceUpdate();
                vnode.componentInstance.$destroy();
            }
        }
    },
});

export default auth;
